
//define.h

/**
 * typedef
 *  用于定义一种类型的别名、指针类型名称、函数指针名称等
 * */

/**
 * 一般一个项目中的typeof定义都会集中在一个c++的头文件中，大家都include此头文件
 * */
typedef unsigned char   BYTE;   //无符号字节
typedef unsigned int    UINT;   //无符号int
typedef unsigned short  WORD;   //无符号short

typedef struct tagStudent {
    char name[32];
    BYTE age;
}Student, *PStudent;
//这里定义了tagStudent的别名Student，同时定义了指针类型别名PStudent;
//这种命名方式形成约定的规则后，有利于代码的维护和阅读

/**
 * 打印学生信息函数指针定义
 * 其实就是定义了一个函数的签名，以后签名完全相同的函数可以作为函数指针的实参传递到任何地方
 * */
typedef void (*printStudentFunc)(PStudent);
//函数指正定义，打印Student内容，接受一个Student的指针类型的参数
//函数指针用于事件处理函数的传递，接收到调用者传入的函数指针后，一般是将此挂载为某个特定条件的执行代码的一部分
//事件机制主要就是通过函数指针实现的


/**
 * 下面定义了一个鼠标溢出的事件原型
 * */
//鼠标的x、y坐标结构体定义
typedef struct tagPoint
{
    int x;
    int y;
} Point, *PPoint;

//鼠标out事件时的事件对象
typedef struct tagMouseEvent
{
    void* sender;
    Point p; //鼠标的x、y坐标
} MouseEvent, *PMouseEvent;

typedef void (*onMouseOutEventFunc)(PMouseEvent, BYTE& canMove);
